 //
//  AppDelegate.swift
//  HotNews
//
//  Created by YYY on 2017/9/21.
//  Copyright © 2017年 成品家（北京）网路科技有限公司. All rights reserved.
//

/*
 查看代码行数：
 find . -name "*.swift" | xargs wc -l
 */
/*
 通知和代理的对比：
 通知：一对多，只要有注册的监听者，在注销监听者之前，都可以接收到通知。
 代理：一对一，最后设置的代理有效。
 iOS开发中，代理的监听方式比较多，代理的执行效率相对通知更高。
 代理是发生事件时，直接让代理执行协议方法。
 通知是发生事件时，将通知发给通知中心，通知中心再广播通知。
 */
/*
 注册监听者的四个参数：
 参数1：监听对象
 参数2:监听方法
 参数3:监听的通知名
 参数4:发送通知的对象，如果是nil，监听所有对象。
 */
/*
 黄色文件夹：打包的时候，不会创建目录，主要保存程序文件，素材不允许重名。
 蓝色文件夹：打包的时候，会创建目录，主要保存素材文件，素材可以重名。
 切忌：不要把程序文件放在蓝色文件夹中。
 Bundle：通常用在第三方框架的素材
 可以按照黄色文件夹的方式进行拖拽，同时保留目录结构，避免文件重名。
 */
/*
 try?：推荐使用，比较安全，如果解析失败，返回nil。
 try!：强烈不推荐使用，如果解析失败，程序直接崩溃。
 do catch：输出错误信息，比较繁琐。
 */
import UIKit
import UserNotifications

import SVProgressHUD
import AFNetworking

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool
    {
        //额外信息
        setupAdditions()
        window = UIWindow()
        window?.backgroundColor = UIColor.white
        window?.rootViewController = YYYMainViewController()
        window?.makeKeyAndVisible()
        //加载app信息
        loadAppInfo()
        return true
    }
}

extension AppDelegate
{
    //额外信息
    private func setupAdditions()
    {
        //获取用户授权通知
        //#available检测设备版本
        if #available(iOS 10.0, *) {
            UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound, .carPlay, .badge]) { (isSuccess, error) in
                print("授权" + (isSuccess ? "成功" : "失败"))
            }
        } else {
            // Fallback on earlier versions
            let notificationSettings = UIUserNotificationSettings(types: [.alert, .sound, .badge], categories: nil)
            UIApplication.shared.registerUserNotificationSettings(notificationSettings)
            
        }
        //设置最小解除时间
        SVProgressHUD.setMinimumDismissTimeInterval(1)
        //设置网络加载指示器可用
        AFNetworkActivityIndicatorManager.shared().isEnabled = true
    }
    //加载app信息
    private func loadAppInfo()
    {
        //模拟异步加载数据
        DispatchQueue.global().async {
            guard let url = Bundle.main.url(forResource: "main.json", withExtension: nil),
                  let data = NSData(contentsOf: url) else
            {
                return
            }
         
            let filePath = (kDocumentPath as NSString).appendingPathComponent("main.json")
            
            //写入沙盒
            data.write(toFile: filePath, atomically: true)
        }
    }
}

/*
 //取消自动布局
 for view in subviews
 {
 view.translatesAutoresizingMaskIntoConstraints = false
 }
 //加载视图
 addConstraint(NSLayoutConstraint(item: iconImageView, attribute: .centerX, relatedBy: .equal, toItem: self, attribute: .centerX, multiplier: 1.0, constant: 0))
 addConstraint(NSLayoutConstraint(item: iconImageView, attribute: .centerY, relatedBy: .equal, toItem: self, attribute: .centerY, multiplier: 1.0, constant: -60))
 //房子视图
 addConstraint(NSLayoutConstraint(item: houseImageView, attribute: .centerX, relatedBy: .equal, toItem: iconImageView, attribute: .centerX, multiplier: 1.0, constant: 0))
 addConstraint(NSLayoutConstraint(item: houseImageView, attribute: .centerY, relatedBy: .equal, toItem: iconImageView, attribute: .centerY, multiplier: 1.0, constant: 0))
 
 //提示标签
 addConstraint(NSLayoutConstraint(item: tipLabel, attribute: .centerX, relatedBy: .equal, toItem: iconImageView, attribute: .centerX, multiplier: 1.0, constant: 0))
 addConstraint(NSLayoutConstraint(item: tipLabel, attribute: .top, relatedBy: .equal, toItem: iconImageView, attribute: .bottom, multiplier: 1.0, constant: margin))
 addConstraint(NSLayoutConstraint(item: tipLabel, attribute: .width, relatedBy: .equal, toItem: nil, attribute: NSLayoutAttribute.notAnAttribute, multiplier: 1.0, constant: 250))
 
 //注册
 addConstraint(NSLayoutConstraint(item: registerButton,
 attribute: .left,
 relatedBy: .equal,
 toItem: tipLabel,
 attribute: .left,
 multiplier: 1.0,
 constant: 0))
 addConstraint(NSLayoutConstraint(item: registerButton,
 attribute: .top,
 relatedBy: .equal,
 toItem: tipLabel,
 attribute: .bottom,
 multiplier: 1.0,
 constant: margin))
 addConstraint(NSLayoutConstraint(item: registerButton,
 attribute: .width,
 relatedBy: .equal,
 toItem: nil,
 attribute:NSLayoutAttribute.notAnAttribute,
 multiplier: 1.0,
 constant: 100))
 
 //登录
 addConstraint(NSLayoutConstraint(item: loginButton,
 attribute: .right,
 relatedBy: .equal,
 toItem: tipLabel,
 attribute: .right,
 multiplier: 1.0,
 constant: 0))
 addConstraint(NSLayoutConstraint(item: loginButton,
 attribute: .top,
 relatedBy: .equal,
 toItem: tipLabel,
 attribute: .bottom,
 multiplier: 1.0,
 constant: margin))
 addConstraint(NSLayoutConstraint(item: loginButton,
 attribute: .width,
 relatedBy: .equal,
 toItem: registerButton,
 attribute: .width,
 multiplier: 1.0,
 constant: 0))
 
 //使用VFL布局
 let viewsDict  = ["maskIconImageView": maskIconImageView,
 "registerButton": registerButton] as [String: Any]
 let metricsDict = ["spacing": -35]
 addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|-0-[maskIconImageView]-0-|", options: [], metrics: nil, views: viewsDict))
 addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|-0-[maskIconImageView]-(spacing)-[registerButton]", options: [], metrics: metricsDict, views: viewsDict))
 */

